liburingutils: Add unit tests Bug: 385143770 Test: IOUringSocketHandler_tests Change-Id: I57de1b3bccee3e6e997786b9dd001a9cb7d625a5 Signed-off-by: Akilesh Kailash <akailash@google.com> 
diff --git a/Android.bp b/Android.bp index f625107..fa190bc 100644 --- a/Android.bp +++ b/Android.bp 
@@ -9,7 +9,10 @@  "src/IOUringSocketHandler.cpp",  ],   - cflags: ["-Werror"], + cflags: [ + "-Wall", + "-Werror", + ],    export_include_dirs: ["include"],   @@ -43,8 +46,8 @@  ],  static_libs: [  "liburing", - ], - shared_libs: [  "liburingutils", + "libbase", + "liblog",  ],  } 
diff --git a/include/IOUringSocketHandler/IOUringSocketHandler.h b/include/IOUringSocketHandler/IOUringSocketHandler.h index 226a5b2..6322ef0 100644 --- a/include/IOUringSocketHandler/IOUringSocketHandler.h +++ b/include/IOUringSocketHandler/IOUringSocketHandler.h 
@@ -60,7 +60,7 @@    // Allocate 'num_buffers' of size 'buf_size'  // - // num_buffers: The number of buffers to allocate. + // num_buffers: The number of buffers to allocate - Should be power of 2.  // buf_size: The size of each buffer in bytes.  //  // This function allocates a set of buffers that will be used for I/O operations 
diff --git a/src/IOUringSocketHandler.cpp b/src/IOUringSocketHandler.cpp index 0c68281..253158b 100644 --- a/src/IOUringSocketHandler.cpp +++ b/src/IOUringSocketHandler.cpp 
@@ -115,6 +115,7 @@  void IOUringSocketHandler::DeRegisterBuffers() {  if (registered_buffers_) {  io_uring_free_buf_ring(&mCtx->ring, br_, num_buffers_, bgid_); + registered_buffers_ = false;  }  buffers_.clear();  num_buffers_ = 0; 
diff --git a/src/IOUringSocketHandler_test.cpp b/src/IOUringSocketHandler_test.cpp index 67361f6..bd352cf 100644 --- a/src/IOUringSocketHandler_test.cpp +++ b/src/IOUringSocketHandler_test.cpp 
@@ -20,12 +20,59 @@    class IOUringSocketHandlerTest : public testing::Test {  public: - void testIsIouringEnabled(bool expectedResult) { - EXPECT_EQ(IOUringSocketHandler::isIouringEnabled(), expectedResult); + bool IsIouringEnabled() { + return IOUringSocketHandler::isIouringEnabled();  } + +protected: + std::unique_ptr<IOUringSocketHandler> handler_; + void InitializeHandler(int socket_fd = 1); + int queue_depth_ = 10;  };   -TEST_F(IOUringSocketHandlerTest, ReturnsIouringNotEnabled) { - // TODO: b/385143770 - Change this behavior to check the OS version and Liburing version. - testIsIouringEnabled(false); +void IOUringSocketHandlerTest::InitializeHandler(int socket_fd) { + handler_ = std::make_unique<IOUringSocketHandler>(socket_fd); +} + +TEST_F(IOUringSocketHandlerTest, SetupIoUring) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); +} + +TEST_F(IOUringSocketHandlerTest, AllocateAndRegisterBuffers) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(8, 4096)); +} + +TEST_F(IOUringSocketHandlerTest, MultipleAllocateAndRegisterBuffers) { + if (!IsIouringEnabled()) { + return; + } + InitializeHandler(); + + EXPECT_TRUE(handler_->SetupIoUring(queue_depth_)); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(4, 4096)); + handler_->DeRegisterBuffers(); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(2, 1024*1024L)); + handler_->DeRegisterBuffers(); + + EXPECT_TRUE(handler_->AllocateAndRegisterBuffers(32, 1024)); + handler_->DeRegisterBuffers(); + + // num_buffers should be power of 2 + EXPECT_FALSE(handler_->AllocateAndRegisterBuffers(5, 4096)); +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS();  }